﻿// owner 蒋家伟

#pragma once

// jsdk
#include "IDevice.h"
#include "HardwareBase_home.h"

namespace jsdk
{
    class ISocketHardwareExternalData;
    // 类别描述 : 套接字硬件设备，当硬件设备需要通过socket通信。自定义一个类型派生ISocketHardwareExternalData，调用Create即可实现一个基本的硬件设备
    class HARDWAREBASE_EXPORT ISocketHardwareDevice : public IDevice
    {
    public:
        static OwnerPtr<ISocketHardwareDevice> create(OwnerPtr<ISocketHardwareExternalData> opSocketHardwareExternalData);

        virtual ~ISocketHardwareDevice() {}

        /// \ brief 通过套接字发送信息给连接的设备
        /// \ note : 线程安全
        /// \ in msg        待发送的数据
        /// \ in length     发送的数据长度
        virtual void sendMessage(std::string&& msg, int64_t length) const = 0;

        /// \ brief 重新连接设备，如果设备出现异常的情况
        virtual void reConnect() const = 0;
    };
}